package modelo;

import geometria.Coordenada;
import geometria.Rectangulo;



public abstract class Pista {
	protected Rectangulo limites;
	// protected java.awt.geom.Rectangle2D.Double limites;
	protected Double maxPeso;
	protected Double maxCarreteo;
	protected Double angulo;
	protected Double ancho;
	protected Double largo;

	/*
	 * public Pista(Coordenada pos,Double angulo, Double peso, Double carreteo){
	 * this.limites = this.generarLimites(pos,angulo); this.angulo = angulo;
	 * this.maxPeso = peso; this.maxCarreteo = carreteo; }
	 * 
	 * public Pista(Coordenada pos,Double angulo){ this.limites =
	 * this.generarLimites(pos,angulo); this.angulo = angulo; this.maxPeso =
	 * this.getMaxPeso(); this.maxCarreteo = this.getMaxCarreteo(); }
	 */

	public Boolean soportaCarreteo(Double cuanto) {
		return (cuanto <= this.maxCarreteo);
	}

	public Boolean soportaPeso(Double p) {
		return (p <= this.maxPeso);
	}

	/**
	 * 
	 * @param inclinacion
	 *            : la inclinacion con respecto al eje x, esto lo necesitamos
	 *            porque los aviones no pueden aterrizar girando a 90º
	 * @param punto
	 *            : en que punto de la pista esta intentando aproximar? No se
	 *            puede iniciar un aterrizaje desde cualquier punto de la pista
	 * @return devuelve true si el avion esta en condiciones de aterrizar
	 */
	public abstract boolean esAproximacionValida(Coordenada origen,
			Coordenada destino);

	/**
	 * 
	 * @param pos
	 *            esquina superior izquierda
	 * @param rotacion
	 *            angulo de rotacion
	 * @return un rectangulo que representa el area de la pista
	 */
	protected abstract void generarLimites(Coordenada pos, Double rotacion);

	public Double getMaxCarreteo() {
		return this.maxCarreteo;
	}

	public Double getMaxPeso() {
		return this.maxPeso;
	}
	//TODO ver si podemos prescindir de este getter
	public Rectangulo getLimits() {
		return this.limites;
	}

	/*
	 * public Rectangle2D.Double getLimits(){ return this.limites; }
	 */


	public Boolean contieneAlPunto(Coordenada c) {
		return this.limites.contiene(c);
	}

	@Override
	public String toString() {
		StringBuilder result = new StringBuilder();
		String NEW_LINE = System.getProperty("line.separator");
		result.append(this.getClass().getName() + NEW_LINE);
		result.append("max peso" + this.maxPeso.toString() + NEW_LINE);
		result.append("max carreteo" + this.maxCarreteo.toString() + NEW_LINE);
		result.append("angulo" + this.angulo.toString() + NEW_LINE);
		result.append("ancho" + this.ancho.toString() + NEW_LINE);
		result.append("largo" + this.largo.toString() + NEW_LINE);
		result.append("limites" + this.limites.toString() + NEW_LINE);
		return result.toString();

	}

}
